package com.iuie.ns.datum.service;

import java.io.IOException;
import java.io.Serializable;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import com.iuie.ns.datum.vo.FileInfoVO;

public interface IFileService {
	
	/**
	 * 新增一个文件
	 * @param file 文件信息
	 * @param immediately 是否立即保存
	 * @param fileType blog/file
	 * @throws IOException
	 */
	FileInfoVO addOneFile(MultipartFile file, Boolean immediately, String fileType) throws IOException;

	/**
	 * 删除文件，当文件删除后才能删除文件信息
	 * @param fileId 文件ID
	 */
	void deleteFileById(Serializable fileId);
	/**
	 * 删除文件
	 * @param fileId 文件ID
	 * @param deleteTag 标记删除文件失败时，是否删除文件信息
	 * @param fileType 文件类型 file/blog
	 */
	void deleteFileById(Serializable fileId, boolean deleteTag, String fileType);
	/**
	 * 
	 * 下载文件
	 * @param fileId 文件ID
	 * @return 文件的字节流
	 * @throws IOException
	 */
	ResponseEntity<byte[]> fileDownload(Serializable fileId,Boolean download) throws IOException;

	/**
	 * 适合大文件的下载方式
	 * @param fileId
	 * @param download
	 * @param resp
	 */
	void fileDownload(Serializable fileId, Boolean download,HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException ;
	
	/**
	 * 更改文件名，使其合法
	 * @param fileId
	 * @throws IOException
	 */
	void letFileNameLegal(Serializable fileId) throws IOException;

}
